/*
 * ZarzadzaniePacjentami.java
 *
 * Created on 2011-04-03, 20:07:50
 * 
 */
package medimg.widok.pacjenci;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.DefaultListModel;
import javax.swing.JOptionPane;
import medimg.scheme.Pacjenci;
import org.hibernate.JDBCException;
import org.hibernate.Session;

/**
 *  Klasa zardządzająca pacjentami w tym dodawanie, usuwanie, edycja.
 * @author PSI
 * @version 1.00
 */
public class ZarzadzaniePacjentami extends javax.swing.JDialog {

    private DefaultListModel listModel;
    private Pacjenci bierzacyPacjent;
    /** Tworzy nowe okno ZarzadzaniePacjentami */
    public ZarzadzaniePacjentami(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        listModel = new DefaultListModel();
        jListPacjenci.setModel(listModel);
        this.setLocationRelativeTo(parent);
        zaladujPacjentow();
        setEnabledAllFields(false);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jListPacjenci = new javax.swing.JList();
        jTextFieldImie = new javax.swing.JTextField();
        jTextFieldNazwisko = new javax.swing.JTextField();
        jTextFieldPesel = new javax.swing.JTextField();
        jTextFieldData = new javax.swing.JTextField();
        jLabelImie = new javax.swing.JLabel();
        jLabelNazwisko = new javax.swing.JLabel();
        jLabelPesel = new javax.swing.JLabel();
        jLabelData = new javax.swing.JLabel();
        jLabelAdres = new javax.swing.JLabel();
        jButtonUsun = new javax.swing.JButton();
        jButtonEdytuj = new javax.swing.JButton();
        jButtonOk = new javax.swing.JButton();
        jButtonDodaj = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextAreaAdres = new javax.swing.JTextArea();
        jButtonZapisz = new javax.swing.JButton();
        jTextFieldFiltr = new javax.swing.JTextField();
        jLabelFiltr = new javax.swing.JLabel();
        jButtonNowy = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Zarządzanie pacjentami");
        setModal(true);
        setName("ZarzadzaniePacjentami"); // NOI18N
        setResizable(false);

        jListPacjenci.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jListPacjenciMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jListPacjenci);

        jLabelImie.setText("Imię");

        jLabelNazwisko.setText("Nazwisko");

        jLabelPesel.setText("PESEL");

        jLabelData.setText("Data urodzenia");

        jLabelAdres.setText("Adres");

        jButtonUsun.setText("Usuń");
        jButtonUsun.setEnabled(false);
        jButtonUsun.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonUsunActionPerformed(evt);
            }
        });

        jButtonEdytuj.setText("Edytuj");
        jButtonEdytuj.setEnabled(false);
        jButtonEdytuj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonEdytujActionPerformed(evt);
            }
        });

        jButtonOk.setText("OK");
        jButtonOk.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonOkActionPerformed(evt);
            }
        });

        jButtonDodaj.setText("Dodaj");
        jButtonDodaj.setEnabled(false);
        jButtonDodaj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonDodajActionPerformed(evt);
            }
        });

        jTextAreaAdres.setColumns(20);
        jTextAreaAdres.setRows(5);
        jScrollPane2.setViewportView(jTextAreaAdres);

        jButtonZapisz.setText("Zapisz");
        jButtonZapisz.setEnabled(false);
        jButtonZapisz.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonZapiszActionPerformed(evt);
            }
        });

        jTextFieldFiltr.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                jTextFieldFiltrKeyReleased(evt);
            }
        });

        jLabelFiltr.setText("Filtr");

        jButtonNowy.setText("Nowy");
        jButtonNowy.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonNowyActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabelFiltr)
                        .addGap(10, 10, 10)
                        .addComponent(jTextFieldFiltr, javax.swing.GroupLayout.PREFERRED_SIZE, 252, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(24, 24, 24)
                        .addComponent(jLabelImie)
                        .addGap(76, 76, 76)
                        .addComponent(jTextFieldImie, javax.swing.GroupLayout.PREFERRED_SIZE, 181, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 280, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(24, 24, 24)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabelNazwisko)
                            .addComponent(jLabelPesel)
                            .addComponent(jLabelAdres)
                            .addComponent(jLabelData))
                        .addGap(23, 23, 23)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextFieldNazwisko, javax.swing.GroupLayout.DEFAULT_SIZE, 181, Short.MAX_VALUE)
                            .addComponent(jTextFieldPesel, javax.swing.GroupLayout.DEFAULT_SIZE, 181, Short.MAX_VALUE)
                            .addComponent(jTextFieldData, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jScrollPane2)))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jButtonNowy)
                        .addGap(6, 6, 6)
                        .addComponent(jButtonEdytuj)
                        .addGap(6, 6, 6)
                        .addComponent(jButtonUsun)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jButtonDodaj)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonZapisz)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButtonOk)))
                .addGap(10, 10, 10))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(4, 4, 4)
                        .addComponent(jLabelFiltr))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(1, 1, 1)
                        .addComponent(jTextFieldFiltr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(4, 4, 4)
                        .addComponent(jLabelImie))
                    .addComponent(jTextFieldImie, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(9, 9, 9)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(2, 2, 2)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(5, 5, 5)
                        .addComponent(jLabelNazwisko)
                        .addGap(17, 17, 17)
                        .addComponent(jLabelPesel)
                        .addGap(17, 17, 17)
                        .addComponent(jLabelData)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jLabelAdres))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jTextFieldNazwisko, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10)
                        .addComponent(jTextFieldPesel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10)
                        .addComponent(jTextFieldData, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(10, 10, 10)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButtonNowy)
                    .addComponent(jButtonEdytuj)
                    .addComponent(jButtonUsun)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jButtonOk)
                        .addComponent(jButtonZapisz)
                        .addComponent(jButtonDodaj)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        getAccessibleContext().setAccessibleParent(null);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOkActionPerformed
        this.dispose();
    }//GEN-LAST:event_jButtonOkActionPerformed

    private void jButtonNowyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonNowyActionPerformed
        setEnabledAllFields(true);
        clearAllFields();
        jListPacjenci.setEnabled(false);
        jListPacjenci.clearSelection();
        jButtonZapisz.setEnabled(false);
        jButtonDodaj.setEnabled(true);
    }//GEN-LAST:event_jButtonNowyActionPerformed

    private void jButtonEdytujActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonEdytujActionPerformed
        setEnabledAllFields(true);
        jListPacjenci.setEnabled(false);
        jButtonZapisz.setEnabled(true);
        jButtonDodaj.setEnabled(false);
    }//GEN-LAST:event_jButtonEdytujActionPerformed

    private void jButtonUsunActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonUsunActionPerformed
        if(jListPacjenci.getSelectedIndex()!= -1){
            removeSelectedPacjent(bierzacyPacjent);
            zaladujPacjentow();
            clearAllFields();
        }

    }//GEN-LAST:event_jButtonUsunActionPerformed

    private void jButtonDodajActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDodajActionPerformed
        if(walidacjaDanych() == true){
            Pacjenci nowyPacjent = new Pacjenci();
            nowyPacjent.setImie(jTextFieldImie.getText());
            nowyPacjent.setNazwisko(jTextFieldNazwisko.getText());
            nowyPacjent.setAdres(jTextAreaAdres.getText());
            nowyPacjent.setDataUr(parseStringToDate(jTextFieldData.getText()));
            nowyPacjent.setPesel(jTextFieldPesel.getText());
            addPacjentToDataBase(nowyPacjent);
            zaladujPacjentow();
            setEnabledAllFields(false);
            jListPacjenci.setEnabled(true);
            jButtonZapisz.setEnabled(false);
            jButtonDodaj.setEnabled(false);
        }else{
            //Info jest bardzo ogolne, mozna uszczegolowic ktore pole jest niepoprawne
            JOptionPane.showConfirmDialog(this,"Podane dane maja nieprawidlowy format!","Blad",JOptionPane.DEFAULT_OPTION);
        }
    }//GEN-LAST:event_jButtonDodajActionPerformed

    private void jButtonZapiszActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonZapiszActionPerformed
        if(walidacjaDanych() == true){
            setEnabledAllFields(false);
            jListPacjenci.setEnabled(true);
            jButtonZapisz.setEnabled(false);
            jButtonDodaj.setEnabled(false);
            updateSelectedPacjent(bierzacyPacjent);
            zaladujPacjentow();
        }else{
            //Info jest bardzo ogolne, mozna uszczegolowic ktore pole jest niepoprawne
            JOptionPane.showConfirmDialog(this,"Podane dane maja nieprawidlowy format!","Blad",JOptionPane.DEFAULT_OPTION);
        }
    }//GEN-LAST:event_jButtonZapiszActionPerformed

    private void jListPacjenciMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jListPacjenciMouseClicked
        if(!jButtonZapisz.isEnabled()){ //jesli ten przycisk jest wlaczony tzn jestesmy w trybie edycji, troche na okolo ale mozna uznac ze projekt nie bedzie rozwijany i nie tworze osobnej zmiennej to kontroli stanu
            readSelectedPacjent();
            setEnabledAllFields(false);
            jButtonEdytuj.setEnabled(true);
            jButtonUsun.setEnabled(true);
        }


    }//GEN-LAST:event_jListPacjenciMouseClicked

    private void jTextFieldFiltrKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTextFieldFiltrKeyReleased
        filtrujListe(jTextFieldFiltr.getText(), listModel);
    }//GEN-LAST:event_jTextFieldFiltrKeyReleased

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                ZarzadzaniePacjentami dialog = new ZarzadzaniePacjentami(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonDodaj;
    private javax.swing.JButton jButtonEdytuj;
    private javax.swing.JButton jButtonNowy;
    private javax.swing.JButton jButtonOk;
    private javax.swing.JButton jButtonUsun;
    private javax.swing.JButton jButtonZapisz;
    private javax.swing.JLabel jLabelAdres;
    private javax.swing.JLabel jLabelData;
    private javax.swing.JLabel jLabelFiltr;
    private javax.swing.JLabel jLabelImie;
    private javax.swing.JLabel jLabelNazwisko;
    private javax.swing.JLabel jLabelPesel;
    private javax.swing.JList jListPacjenci;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea jTextAreaAdres;
    private javax.swing.JTextField jTextFieldData;
    private javax.swing.JTextField jTextFieldFiltr;
    private javax.swing.JTextField jTextFieldImie;
    private javax.swing.JTextField jTextFieldNazwisko;
    private javax.swing.JTextField jTextFieldPesel;
    // End of variables declaration//GEN-END:variables
    /**
     *  Laduje pacjentow z bazy danych do GUI.
     */
    public void zaladujPacjentow(){
        if(!medimg.hibernate.HibernateUtil.isOpen()){
            JOptionPane.showConfirmDialog(this,"Najpierw podłącz się do bazy.","Nie polaczono",JOptionPane.DEFAULT_OPTION);
            return;
        }
        listModel.removeAllElements();
        ArrayList<Pacjenci> pacjenciArray=null;
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        Pacjenci pacjent=null;
        try{
            session.beginTransaction(); //rozpoczecie transakcji
            pacjenciArray = new ArrayList<Pacjenci>(session.createQuery("from Pacjenci").list());
            session.getTransaction().commit();
        }
        catch(JDBCException ex){
             session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }

        if(pacjenciArray != null && !pacjenciArray.isEmpty()){
           
            for(Pacjenci pac:pacjenciArray){
               // listModel.addElement((pac.getNazwisko() +" "+ pac.getImie()));
                listModel.addElement(pac.getPesel());
            }
        }
        else{ //jesli nie to MB
             JOptionPane.showConfirmDialog(this,"Nie pobrano zadnych danych.","Brak danych",JOptionPane.DEFAULT_OPTION);
        }
    }

    /**
     *  Czyta wybranego pacjenta z bazy.
     */
    private void readSelectedPacjent(){
        if(!medimg.hibernate.HibernateUtil.isOpen()){
            JOptionPane.showConfirmDialog(this,"Najpierw podłącz się do bazy.","Nie polaczono",JOptionPane.DEFAULT_OPTION);
            return;
        }
        ArrayList<Pacjenci> pacjenciArray=null;
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        Pacjenci pacjent=null;
        try{
            session.beginTransaction(); //rozpoczecie transakcji
            pacjent =(Pacjenci) (session.createQuery("from Pacjenci where pesel="+jListPacjenci.getSelectedValue()).uniqueResult());
            session.getTransaction().commit();
        }
        catch(JDBCException ex){
             session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }
        if(pacjent != null){
            jTextFieldImie.setText(pacjent.getImie());
            jTextFieldNazwisko.setText(pacjent.getNazwisko());
            jTextFieldData.setText(java.lang.String.valueOf(pacjent.getDataUr()));
            jTextAreaAdres.setText(pacjent.getAdres());
            jTextFieldPesel.setText(pacjent.getPesel());
        }
        else{
            JOptionPane.showConfirmDialog(this,"Problem z pobraniem danych.","Blad",JOptionPane.DEFAULT_OPTION);
        }
        bierzacyPacjent = pacjent;
    }

    /**
     *  Uaktualnia dane w bazie danych pacjenta.
     * @param zaznaczony pacjent w GUI ktorego dotyczy aktualizacja
     */
    private void updateSelectedPacjent(Pacjenci pacjent){
        pacjent.setPesel(jTextFieldPesel.getText());
        pacjent.setImie(jTextFieldImie.getText());
        pacjent.setNazwisko(jTextFieldNazwisko.getText());
        pacjent.setAdres(jTextAreaAdres.getText());
        if(!java.lang.String.valueOf(pacjent.getDataUr()).equals(jTextFieldData.getText())){
            Date data = parseStringToDate(jTextFieldData.getText());
            if(data != null){
                bierzacyPacjent.setDataUr(data);
            }
        }
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        try{
            session.beginTransaction(); //rozpoczecie transakcji
            session.update(pacjent);
            session.getTransaction().commit();
        }
        catch(JDBCException ex){
             session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }

    }

    /**
     *  Usuwa pacjenta z bazy danych.
     * @param zaznaczony pacjent w GUI ktory bedzie usuniety
     */
    private void removeSelectedPacjent(Pacjenci pacjent){
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        try{
            session.beginTransaction(); //rozpoczecie transakcji
            session.delete(pacjent);
            session.getTransaction().commit();
        }
        catch(JDBCException ex){
             session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }
    }

    private boolean walidacjaDanych(){
        if(parseStringToDate(jTextFieldData.getText()) == null)
            return false;
        if(!czyPrawidlowyPesel(jTextFieldPesel.getText()))
            return false;
        return true;
    }
    /**
     *  Dodaje pacjenta do bazy danych oraz tworzy konto DDL.
     * @param obiekt pacjenta ktory bedzie dodany do bazy danych
     */
    private void addPacjentToDataBase(Pacjenci pacjent){
        Session session = medimg.hibernate.HibernateUtil.getSessionFactory().getCurrentSession(); //pobranie obecnej sesji (autostart jesli jej nie ma)
        try{
            session.beginTransaction(); //rozpoczecie transakcji
            session.save(pacjent);
            medimg.JDBC.JDBCUtil.ConnectToDB(medimg.hibernate.HibernateUtil.getConfiguration().getProperty("hibernate.connection.url"),
                    medimg.hibernate.HibernateUtil.getConfiguration().getProperty("hibernate.connection.username"),
                    medimg.hibernate.HibernateUtil.getConfiguration().getProperty("hibernate.connection.password")
                    );
            medimg.JDBC.JDBCUtil.createUserInDB(pacjent.getPesel(), "localhost", "pass");
            medimg.JDBC.JDBCUtil.addPrivilegesToUser(pacjent.getPesel(), "localhost", 0);
            session.getTransaction().commit();
        }
        catch(JDBCException ex){
             session.getTransaction().rollback(); //jesli sie nie udalo to rollback zeby dane byly zgodne
        }
    }

    /**
     *  Parsuje string do obiektu typu Date.
     * @param string ulegający parsowaniu
     */
    private Date parseStringToDate(String text){
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Date newDate=null;
            try{
               newDate  = df.parse(text);
            }
            catch(ParseException ex){
                //ex.printStackTrace();
            }
            return newDate;
    }
 
    /**
     *  Uaktywnia wszystkie kontrolki w oknie
     * @param nowy stan dla kontrolek
     */
    private void setEnabledAllFields(boolean newState){
            jTextAreaAdres.setEnabled(newState);
            jTextFieldData.setEnabled(newState);
            jTextFieldImie.setEnabled(newState);
            jTextFieldNazwisko.setEnabled(newState);
            jTextFieldPesel.setEnabled(newState);
    }
   
    /**
     *  Czysci wszystkie kontrolki w oknie
     */
    private void clearAllFields(){
            jTextAreaAdres.setText("");
            jTextFieldData.setText("");
            jTextFieldImie.setText("");
            jTextFieldNazwisko.setText("");
            jTextFieldPesel.setText("");
    }

    /**
     *  Metoda filtrująca listę pacjentow
     * @param narzucony filtr
     * @param model listy
     */
    private void filtrujListe(String filtr, DefaultListModel model){
        if(filtr.length() == 0){ //jesli filtr pusty to przywroc stary model ktory zawiera wszystkie rekordy
            jListPacjenci.setModel(model);
        }else{
            DefaultListModel newModel = new DefaultListModel();
            for(int i=0; i<model.getSize();i++){
                //jesli znaleziony filtr jest na poczatku napisu to dodaj do nowego modelu
                if(model.getElementAt(i).toString().indexOf(filtr) == 0)
                    newModel.addElement(model.getElementAt(i)); 
            }
            jListPacjenci.setModel(newModel);
        }

    }

    /**
     * Walidacja peselu.
     * @param str - pesel
     * @return true jest poprawny, false jesli nie
     */
    private boolean czyPrawidlowyPesel(java.lang.String str){
        if(str.length() != 11)
            return false;
        for(int i=0; i<str.length();i++){
            if(!Character.isDigit(str.charAt(i))){
                return false;
            }
        }
        return true;
    }
}
